Projeto - Processamento Digital de Imagens¶
Alunos: Gabriel de Oliveira e Silva Padovani Barreto RA: 2326221 Johanna Kirchner RA: 2265010
Parte 1: Definição do tema, coleta e pré-processamento de imagens¶
Foram escolhidos itens de armarinho como tema dos objetos que formam o dataset. Foram determinadas 10 classes de objetos, cada uma contendo 5 itens dos quais foram capturadas 4 fotos utilizando uma camera digital, com fundo e posicionamento variados, combinando dois tipos de fundo com duas posições diferentes. As imagens foram armazenadas em pastas de acordo com sua classe, e nomeadas seguindo a formatação <CLASSID>-<IMG_SEQUENCE>-V1|V2-B|W.png.
A exibição das imagens e os metadados do projeto podem ser visualizados no arquivo show_dataset_info.ipynb.
from utilidades import *
from trim_dataset import TrimDataset
dataset = TrimDataset('trims_dataset')
plot_class_grid(dataset, 2, 'nobbox')
Para a marcação das imagens, utilizou-se o CVAT, onde foi marcado o objeto de interesse em cada uma das imagens.
plot_class_grid(dataset, 2, 'bbox')
Para realizar o pré-processamento das imagens, e a subsequente criação do dataset, criou-se a classe TrimDataset, que armazena todas as informações relevantes do Dataset e os métodos utilizados para o seu pré-processamento. Tal classe está localizada no arquivo trims_dataset.py.
A primeira etapa do pré-processamento foi diminuir a resolução das imagens capturadas, tanto para diminuir o espaço ocupado pelos arquivos quando para acelerar o treinamento do modelo. A resolução das imagens originais foi diminuida de 2112x2112 para 224x224 sem perdas de eficiência do modelo.
Essa primeira etapa é realizada pela função resize_image, aplicada já na instancia de um objeto TrimDataset. Para reduzir o gasto computacional e de memória, as imagens incluídas nos arquivos do projeto já estão com a resolução reduzida, podendo ser encontradas na pasta trims_dataset ou arquivo .tar.gz de mesmo nome.
A segunda etapa envolve a aumentação do dataset, realizada pela função dataset_augmentation dentro da classe TrimDataset. Utilizando a biblioteca Albumentations, tal função aplica uma série de transformações a cada imagem do dataset, sendo elas: Uma dentre quatro transformações geométricas possíveis, ajuste aleatório do brilho e do contraste (50% de chance), blur gaussiano (50% de chance), ajuste da saturação da imagem (50% de chance).
Ao fim dessa etapa, o dataset aumenta de 200 fotos originais para 600 fotos aumentadas, sendo que essa nova versão do dataset é salvo em uma nova pasta denominada augmented_dataset.
No pedaço de código abaixo, executamos o dataset_augmentation e plotamos todas as fotos que compõem o dataset até o momento.
dataset.dataset_augmentation()
plot_class_grid(dataset, 60, "nobbox")